// #include<stdio.h>

//转移表-->计算器
// void menu ()
// {
//     printf ("----------------------\n");
//     printf ("---- 1.Add  2.Sub ----\n");
//     printf ("---- 3.Mul  4.Div ----\n");
//     printf ("------- 0.exit -------\n");
//     printf ("----------------------\n");
// }
// int Add(int x,int y)
// {
//     return x+y;
// }
// int Sub(int x,int y)
// {
//     return x-y;
// }
// int Mul(int x,int y)
// {
//     return x*y;
// }
// int Div(int x,int y)
// {
//     return x/y;
// }

// int main ()
// {
//     int input,x,y,ret;
//     int (*pfArr[])(int,int)={0,Add,Sub,Mul,Div};
//     do
//     {
//         menu();
//         scanf ("%d",&input);
//         if (input>0&&input<5)
//         {
//             printf ("请输入两个数：\n");
//             scanf ("%d%d",&x,&y);
//             ret =pfArr[input](x,y);
//             printf ("%d\n",ret);
//         }
//         else if(input==0)
//         {
//             printf ("退出计算器\n");
//             break;
//         }
//         else
//             printf ("输入错误，请重新输入：\n");
//     } while (input);
    
//     return 0;
// }


//模拟实现 qsort 函数（冒泡排序）
/*void qsort(void* base, 
            size_t num,
            size_t size,
            int (*compar)(const void*,const void*));*/
// #include<stdio.h>
// #include<stdlib.h>
// #include<string.h>

// //冒泡排序
// void swap(char* buf1,char* buf2,size_t width)
// {
//     for (int i=0;i<width;i++)
//     {
//         char tmp = *buf1;
//         *buf1 = *buf2;
//         *buf2 = tmp;
//         buf1++;
//         buf2++;
//     }
// }
// void bubble_sort(void* base,size_t sz,size_t width,int (*cmp)(const void* e1,const void* e2))
// {
//     for (int i=0;i<sz-1;i++)
//     {
//         for (int j=0;j<sz-1-i;j++)
//         {
//             //比较函数
//             if (cmp((char*)base+j*width,(char*)base+(j+1)*width)>0)
//             {
//                 //交换
//                 swap((char*)base+j*width,(char*)base+(j+1)*width,width);
//             }
//         }
//     }
// }

// //测试qsort/bubble_sort排序整形数组
// int cmp_int(const void* e1,const void* e2)
// {
//     return *(int*)e1-*(int*)e2;
// }

// void print_arr(int arr[],int sz)
// {
//     int i=0;
//     for (i=0;i<sz;i++)
//         printf ("%d ",arr[i]);
//     printf ("\n");
// }
// void test1 ()
// {
//     int arr[] = { 4,7,2,6,5,1,0,8,3,9 };
//     int sz=sizeof(arr)/sizeof(arr[0]);
//     print_arr(arr,sz);
//     qsort (arr,sz,sizeof(arr[0]),cmp_int);
//     //bubble_sort(arr,sz,sizeof(arr[0]),cmp_int);
//     print_arr(arr,sz);
// }
// //测试qsort/bubble_sort排序结构体数组
// struct stu
// {
//     char name[20];
//     int age;
// };
// int cmp_stu_by_name(const void* e1,const void* e2)
// {
//     return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
// }
// int cmp_stu_by_age(const void* e1,const void* e2)
// {
//     return ((struct stu*)e1)->age - ((struct stu*)e2)->age;
// }
// void test2 ()
// {
//     struct stu s[]={{"zhangsan",20},{"lisi",23},{"wangwu",17}};
//     int sz=sizeof(s)/sizeof(s[0]);
//     //qsort (s,sz,sizeof(s[0]),cmp_stu_by_name);
//     //qsort (s,sz,sizeof(s[0]),cmp_stu_by_age);
//     //bubble_sort (s,sz,sizeof(s[0]),cmp_stu_by_name);
//     //bubble_sort (s,sz,sizeof(s[0]),cmp_stu_by_age);
// }


// int main ()
// {
//     test1 ();
//     //test2 ();
//     return 0;
// }


//找单身狗2（两只狗）
// #include<stdio.h>

// void Find_single_dog(int arr[],size_t sz)
// {
//     //全部按位异或，就是两个单身狗异或
//     int i=0;
//     int m=0;
//     for (i=0;i<sz;i++)
//         m^=arr[i];
//     //确定第几位为1
//     int n=0;
//     while(n<32)
//     {
//         if (((m>>n)&1)==1)
//             break;
//         else
//             n++;
//     }
//     //分成两组
//     int a=0;
//     int b=0;
//     for (i=0;i<sz;i++)
//     {
//         if (((arr[i]>>n)&1)==1)
//             a^=arr[i];
//         else
//             b^=arr[i];
//     }
//     printf("%d %d\n",a,b); 
// }
// int main ()
// {
//     int arr[]={1,2,3,4,5,1,2,3,4,6};
//     int sz=sizeof(arr)/sizeof(arr[0]);
//     Find_single_dog(arr,sz);
//     return 0;
// }


//输入年份月份打印天数
#include <stdio.h>

int main() {
    int year, month;
    int arr[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    while (scanf("%d %d", &year, &month) != EOF) 
    {
        if(((year%4==0&&year%100!=0)||(year%400==0))&&(month==2))
            printf("%d\n",arr[month]+1);
        else
            printf("%d\n",arr[month]);
    }
    return 0;
}